#pragma once
#include "PDTExpBoolSing.h"
#include "PDTVar.h"

class PDTBoolVar :  public PDTExpBoolSing, public PDTVar, public TraverseIfc <PDTBoolVar, PDTNode> { 
    public: 
         TRAVERSAL_IFC_IMPL(PDTBoolVar)
    public:
           PDTBoolVar(PDTCodeGraph & CG, string name);
               
               NodeTypeEnum getType() {
                   return PDTBoolVar_Em;
               }
           
               virtual bool isBoolVar() {
                   return true;
               }
           
               virtual bool isVar() {
                   return true;
               }
           
               virtual PDTNode* getNode() {
                   return this;
               }
           
               virtual ~PDTBoolVar() {
               }
           
               virtual PDTNode* clone(PDTCodeGraph &CG)
               {
                   PDTNode* toReturn;
                       stringstream sss;
                       sss<<cloneID;
                       toReturn = new PDTBoolVar(CG, getName()+"!s"+sss.str());
                       return toReturn;
               }
           
               virtual stringstream & toString(stringstream & ss) const {
                   ss << getName();
                       
                       return ss;
               }
           
               virtual PDTNode* getValue(){
                   return nValue;
               }
           
               virtual Z3_ast Z3NodeVisit (PDTZ3Visitor &ZV);
};
